Ruby 日記 20日目: レキシカルスコープとクラスの継承
次のプログラムを実行するとどうなりますか
code:gold/ex20/main.rb
class Ca
CONST = "001"
end
class Cb
CONST = "010"
end
class Cc
CONST = "011"
end
class Cd
CONST = "100"
end
module M1
class C0 < Ca
class C1 < Cc
class C2 < Cd
p CONST
class C2 < Cb
end
end
end
end
end
選択肢:
"001"と表示される
"010"と表示される
"011"と表示される
"100"と表示される
解説:
CONSTがレキシカルスコープに定義されていないので、スーパークラスを探索する。 C2クラスはCdクラスを継承しているので、Cdクラス内に定義された CONST = "100" が正解。
code:sh
# ruby gold/ex20/main.rb
"100"
/icons/hr.icon
C2クラスの継承順序を確認してみる。 p CONST を p self.ancestors に書き換えて実行
code:sh
# ruby gold/ex20/ancestors.rb